{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# importing the MLBox"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using Theano backend.\n",
      "/home/datageek/anaconda2/lib/python2.7/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from mlbox.preprocessing import *\n",
    "from mlbox.optimisation import *\n",
    "from mlbox.prediction import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "paths = [\"train.csv\",\"test.csv\"]\n",
    "target_name = \"SalePrice\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# reading and cleaning all files "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "reading csv : train.csv ...\n",
      "cleaning data ...\n",
      "CPU time: 0.870355129242 seconds\n",
      "\n",
      "reading csv : test.csv ...\n",
      "cleaning data ...\n",
      "CPU time: 0.817306995392 seconds\n",
      "\n",
      "> Number of common features : 80\n",
      "\n",
      "gathering and crunching for train and test datasets ...\n",
      "reindexing for train and test datasets ...\n",
      "dropping training duplicates ...\n",
      "dropping constant variables on training set ...\n",
      "\n",
      "> Number of categorical features: 43\n",
      "> Number of numerical features: 37\n",
      "> Number of training samples : 1460\n",
      "> Number of test samples : 1459\n",
      "\n",
      "> Top sparse features (% missing values on train set):\n",
      "PoolQC         99.5\n",
      "MiscFeature    96.3\n",
      "Alley          93.8\n",
      "Fence          80.8\n",
      "FireplaceQu    47.3\n",
      "dtype: float64\n",
      "\n",
      "> Task : regression\n",
      "count      1460.000000\n",
      "mean     180921.195890\n",
      "std       79442.502883\n",
      "min       34900.000000\n",
      "25%      129975.000000\n",
      "50%      163000.000000\n",
      "75%      214000.000000\n",
      "max      755000.000000\n",
      "Name: SalePrice, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "rd = Reader(sep = ',')\n",
    "df = rd.train_test_split(paths, target_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "computing drifts ...\n",
      "CPU time: 0.694604873657 seconds\n",
      "\n",
      "> Top 10 drifts\n",
      "\n",
      "('Id', 0.9993141289437586)\n",
      "('GarageYrBlt', 0.058603155187046063)\n",
      "('Exterior1st', 0.051728220022389637)\n",
      "('TotalBsmtSF', 0.047797384757831907)\n",
      "('2ndFlrSF', 0.042466584861516665)\n",
      "('Exterior2nd', 0.042145856162453033)\n",
      "('BsmtFullBath', 0.040377812116377587)\n",
      "('GrLivArea', 0.039437274266823197)\n",
      "('TotRmsAbvGrd', 0.038939865235153803)\n",
      "('WoodDeckSF', 0.037307853783462352)\n",
      "\n",
      "> Deleted variables : ['Id']\n",
      "> Drift coefficients dumped into directory : save\n"
     ]
    }
   ],
   "source": [
    "dft = Drift_thresholder()\n",
    "df = dft.fit_transform(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# tuning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/datageek/anaconda2/lib/python2.7/site-packages/mlbox/optimisation/optimiser.py:78: UserWarning: Optimiser will save all your fitted models into directory 'save/joblib'. Please clear it regularly.\n",
      "  +str(self.to_path)+\"/joblib'. Please clear it regularly.\")\n"
     ]
    }
   ],
   "source": [
    "mape = make_scorer(lambda y_true, y_pred: 100*np.sum(np.abs(y_true-y_pred)/y_true)/len(y_true), greater_is_better=False, needs_proba=False)\n",
    "opt = Optimiser(scoring = mape, n_folds = 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No parameters set. Default configuration is tested\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 'mean', 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'label_encoding'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'max_depth': -1, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'min_child_samples': 10, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -16.5501726299\n",
      "VARIANCE : 2.00925690187 (fold 1 = -19.3633082808, fold 2 = -15.4905497623, fold 3 = -14.7966598466)\n",
      "CPU time: 7.96322011948 seconds\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "-16.550172629917437"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "opt.evaluate(None, df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.07553727171443735, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 5, 'boosting_type': 'gbdt'}\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/datageek/anaconda2/lib/python2.7/site-packages/sklearn/linear_model/coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n",
      "  ConvergenceWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.0131701568\n",
      "VARIANCE : 1.94422752181 (fold 1 = -19.7231981208, fold 2 = -16.0604524723, fold 3 = -15.2558598775)\n",
      "CPU time: 9.01879310608 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'random_projection'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.2712770562069091, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 7, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -16.9177571738\n",
      "VARIANCE : 1.96716650473 (fold 1 = -19.6765325914, fold 2 = -15.8489893813, fold 3 = -15.2277495486)\n",
      "CPU time: 7.51258301735 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'random_projection'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.1036962100618564, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 3, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -18.2163238029\n",
      "VARIANCE : 1.83923216949 (fold 1 = -20.793218976, fold 2 = -17.2342598159, fold 3 = -16.6214926168)\n",
      "CPU time: 3.55751514435 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'label_encoding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.2553630110251442, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 4, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.900601463\n",
      "VARIANCE : 1.89379702086 (fold 1 = -20.5519330635, fold 2 = -16.9028553065, fold 3 = -16.2470160191)\n",
      "CPU time: 4.58725905418 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.21077004892412388, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 5, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.0131701568\n",
      "VARIANCE : 1.94422752181 (fold 1 = -19.7231981208, fold 2 = -16.0604524723, fold 3 = -15.2558598775)\n",
      "CPU time: 10.1095712185 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.0942581425494008, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 4, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.5130005197\n",
      "VARIANCE : 1.91833085819 (fold 1 = -20.2043938966, fold 2 = -16.4627546566, fold 3 = -15.8718530058)\n",
      "CPU time: 8.20327496529 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'label_encoding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.09634007587072402, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 5, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.0795396452\n",
      "VARIANCE : 1.9709030011 (fold 1 = -19.8229454763, fold 2 = -16.1344293857, fold 3 = -15.2812440737)\n",
      "CPU time: 10.3741140366 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.06523125781351669, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 4, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.5130005197\n",
      "VARIANCE : 1.91833085819 (fold 1 = -20.2043938966, fold 2 = -16.4627546566, fold 3 = -15.8718530058)\n",
      "CPU time: 9.19327497482 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.14212711217770352, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 5, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.0131701568\n",
      "VARIANCE : 1.94422752181 (fold 1 = -19.7231981208, fold 2 = -16.0604524723, fold 3 = -15.2558598775)\n",
      "CPU time: 12.015444994 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'random_projection'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.01335185141115944, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 3, 'boosting_type': 'gbdt'}\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -18.2243140592\n",
      "VARIANCE : 1.85042772549 (fold 1 = -20.8171897448, fold 2 = -17.2342598159, fold 3 = -16.6214926168)\n",
      "CPU time: 8.42891383171 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'label_encoding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.22805780286080266, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 3, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -18.7512121093\n",
      "VARIANCE : 1.84788960225 (fold 1 = -21.3341323721, fold 2 = -17.8038975289, fold 3 = -17.115606427)\n",
      "CPU time: 4.22351288795 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.19682488246461524, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 3, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -18.3251479765\n",
      "VARIANCE : 1.91545472558 (fold 1 = -21.0069193899, fold 2 = -17.3152105638, fold 3 = -16.6533139757)\n",
      "CPU time: 11.4882760048 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.29082556904114176, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 6, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -16.7159644212\n",
      "VARIANCE : 1.93719920314 (fold 1 = -19.4173229961, fold 2 = -15.7603895713, fold 3 = -14.9701806963)\n",
      "CPU time: 10.8963618279 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'label_encoding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.13255008380926836, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 6, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -16.8111429995\n",
      "VARIANCE : 1.95379811163 (fold 1 = -19.5401930546, fold 2 = -15.8210574718, fold 3 = -15.072178472)\n",
      "CPU time: 15.9927880764 seconds\n",
      "\n",
      "\n",
      "##################################################### testing hyper-parameters... #####################################################\n",
      "\n",
      ">>> NA ENCODER :{'numerical_strategy': 0, 'categorical_strategy': '<NULL>'}\n",
      "\n",
      ">>> CA ENCODER :{'strategy': 'entity_embedding'}\n",
      "\n",
      ">>> FEATURE SELECTOR :{'threshold': 0.15766382073670995, 'strategy': 'l1'}\n",
      "\n",
      ">>> ESTIMATOR :{'num_leaves': 31, 'reg_alpha': 0, 'subsample_for_bin': 50000, 'colsample_bytree': 0.8, 'silent': True, 'learning_rate': 0.05, 'nthread': -1, 'min_child_weight': 5, 'strategy': 'LightGBM', 'n_estimators': 500, 'subsample': 0.9, 'reg_lambda': 0, 'subsample_freq': 1, 'min_child_samples': 10, 'max_bin': 255, 'objective': 'regression', 'min_split_gain': 0, 'seed': 0, 'max_depth': 4, 'boosting_type': 'gbdt'}\n",
      "\n",
      "\n",
      "MEAN SCORE : make_scorer(<lambda>, greater_is_better=False) = -17.5130005197\n",
      "VARIANCE : 1.91833085819 (fold 1 = -20.2043938966, fold 2 = -16.4627546566, fold 3 = -15.8718530058)\n",
      "CPU time: 10.5812551975 seconds\n",
      "\n",
      "\n",
      "\n",
      "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",
      "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BEST HYPER-PARAMETERS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",
      "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",
      "\n",
      "{'est__max_depth': 6, 'fs__threshold': 0.29082556904114176, 'ce__strategy': 'entity_embedding', 'ne__numerical_strategy': 0}\n"
     ]
    }
   ],
   "source": [
    "space = {\n",
    "    \n",
    "        'ne__numerical_strategy':{\"search\":\"choice\",\n",
    "                                 \"space\":[0]},\n",
    "        'ce__strategy':{\"search\":\"choice\",\n",
    "                        \"space\":[\"label_encoding\",\"random_projection\", \"entity_embedding\"]}, \n",
    "        'fs__threshold':{\"search\":\"uniform\",\n",
    "                        \"space\":[0.01,0.3]},    \n",
    "        'est__max_depth':{\"search\":\"choice\",\n",
    "                                  \"space\":[3,4,5,6,7]}\n",
    "    \n",
    "        }\n",
    "\n",
    "best = opt.optimise(space, df, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "fitting the pipeline ...\n",
      "CPU time: 24.3019030094 seconds\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nW5aXrAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f67152fbd90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "> Feature importances dumped into directory : save\n",
      "\n",
      "predicting...\n",
      "CPU time: 0.247318983078 seconds\n",
      "\n",
      "> Overview on predictions : \n",
      "\n",
      "   SalePrice_predicted\n",
      "0        134044.028235\n",
      "1        144594.881585\n",
      "2        180050.531399\n",
      "3        181463.178663\n",
      "4        202005.069875\n",
      "5        178437.609779\n",
      "6        171465.485935\n",
      "7        172144.412085\n",
      "8        186061.406054\n",
      "9        133123.267499\n",
      "\n",
      "dumping predictions into directory : save ...\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<mlbox.prediction.predictor.Predictor instance at 0x7f672fb2f098>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prd = Predictor()\n",
    "prd.fit_predict(best, df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
